#include "exti.h"
#include "delay.h"

extern u8 flag;

void Init_LED(void)
{
	GPIO_InitTypeDef  GPIO_InitStructure;

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOF, ENABLE);	 

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5;	
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		
	GPIO_Init(GPIOC, &GPIO_InitStructure);					
	
	GPIO_SetBits(GPIOC,GPIO_Pin_4|GPIO_Pin_5);		


	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;	
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		
	GPIO_Init(GPIOB, &GPIO_InitStructure);					
	
	GPIO_SetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1);	
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;				
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		
	GPIO_Init(GPIOF, &GPIO_InitStructure);					
	GPIO_SetBits(GPIOF,GPIO_Pin_11);	

	
}

void EXTICYR_Init(void)
{
	
	EXTI_InitTypeDef EXTI_InitSturct;
	NVIC_InitTypeDef NVIC_InitSturct;
	GPIO_InitTypeDef GPIO_InitSturct; 
	
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOG|RCC_APB2Periph_GPIOF|RCC_APB2Periph_AFIO,ENABLE);
	GPIO_InitSturct.GPIO_Pin=GPIO_Pin_13;
	GPIO_InitSturct.GPIO_Mode=GPIO_Mode_IPU;
	GPIO_InitSturct.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOC,&GPIO_InitSturct);
	
	GPIO_InitSturct.GPIO_Pin=GPIO_Pin_15;
	GPIO_InitSturct.GPIO_Mode=GPIO_Mode_IPU;
	GPIO_InitSturct.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOG,&GPIO_InitSturct);
	
	GPIO_InitSturct.GPIO_Pin=GPIO_Pin_7;
	GPIO_InitSturct.GPIO_Mode=GPIO_Mode_IPU;
	GPIO_InitSturct.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOF,&GPIO_InitSturct);
	
	
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource13);
	EXTI_InitSturct.EXTI_Line=EXTI_Line13;
	EXTI_InitSturct.EXTI_LineCmd=ENABLE;
	EXTI_InitSturct.EXTI_Mode=EXTI_Mode_Interrupt;
	EXTI_InitSturct.EXTI_Trigger=EXTI_Trigger_Falling;
	EXTI_Init(&EXTI_InitSturct);
	
	
	
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOG,GPIO_PinSource15);
	EXTI_InitSturct.EXTI_Line=EXTI_Line15;
	EXTI_InitSturct.EXTI_LineCmd=ENABLE;
	EXTI_InitSturct.EXTI_Mode=EXTI_Mode_Interrupt;
	EXTI_InitSturct.EXTI_Trigger=EXTI_Trigger_Falling;
	EXTI_Init(&EXTI_InitSturct);
	
	
	

	GPIO_EXTILineConfig(GPIO_PortSourceGPIOF,GPIO_PinSource7);
	EXTI_InitSturct.EXTI_Line=EXTI_Line7;
	EXTI_InitSturct.EXTI_LineCmd=ENABLE;
	EXTI_InitSturct.EXTI_Mode=EXTI_Mode_Interrupt;
	EXTI_InitSturct.EXTI_Trigger=EXTI_Trigger_Falling;
	EXTI_Init(&EXTI_InitSturct);
	
	
	
	NVIC_InitSturct.NVIC_IRQChannel=EXTI9_5_IRQn;
	NVIC_InitSturct.NVIC_IRQChannelCmd=ENABLE;
	NVIC_InitSturct.NVIC_IRQChannelPreemptionPriority=1;
	NVIC_InitSturct.NVIC_IRQChannelSubPriority=1;
	NVIC_Init(&NVIC_InitSturct);
	
	NVIC_InitSturct.NVIC_IRQChannel=EXTI15_10_IRQn;
	NVIC_InitSturct.NVIC_IRQChannelCmd=ENABLE;
	NVIC_InitSturct.NVIC_IRQChannelPreemptionPriority=1;
	NVIC_InitSturct.NVIC_IRQChannelSubPriority=1;
	NVIC_Init(&NVIC_InitSturct);
	
	
}
void EXTI9_5_IRQHandler(void)
{
	delay_ms(10);
	if(EXTI_GetITStatus(EXTI_Line7)==1)
	{
			flag=3;
			EXTI_ClearITPendingBit(EXTI_Line7);
	}
		

}
void EXTI15_10_IRQHandler(void)
{
	delay_ms(10);
	if(EXTI_GetITStatus(EXTI_Line13)==1)
	{
			flag=1;

			EXTI_ClearITPendingBit(EXTI_Line13);
	}
	else if(EXTI_GetITStatus(EXTI_Line15)==1)
	{
			flag=2;

			EXTI_ClearITPendingBit(EXTI_Line15);
	}
}


